'''
某公司有三种员工 部门经理、程序员、销售员
需要设计一个公司结算系统，根据提供的员工信息来计算月薪。
经理的月薪每月50000
程序员薪水按时计算，每小时200
销售员月薪2000底薪加销售额的%5提成
'''
from abc import ABCMeta, abstractclassmethod


class Employee(object, metaclass=ABCMeta):
    '''员工'''

    def __init__(self, name):
        '''初始化方法'''
        self._name = name

    @property
    def name(self):
        return self._name

    @abstractclassmethod
    def get_salary(self):
        '''获得月薪'''
        pass


class Manage(Employee):
    '''经理'''

    def get_salary(self):
        return 50000.0


class Programmer(Employee):
    '''程序员'''

    def __init__(self, name, working_hour=0):
        super().__init__(name)
        self._working_hour = working_hour

    @property
    def working_hour(self):
        return self._working_hour

    @working_hour.setter
    def working_hour(self, working_hour):
        self._working_hour = working_hour if working_hour > 0 else 0

    def get_salary(self):
        return 200 * self._working_hour


class Saleman(Employee):
    '''销售员'''

    def __init__(self, name, sales=0):
        super().__init__(name)
        self._sales = sales

    @property
    def sales(self):
        return self._sales

    @sales.setter
    def sales(self,sales):
        self._sales = sales if sales > 0 else 0

    def get_salary(self):
        return 0.05 * self._sales + 2000.0

def main():
    emps = [
        Manage('DD'),
        Programmer('LWN'),
        Saleman('LY'),
        Saleman('FY')
    ]


    for emp in emps:
        if isinstance(emp,Programmer):
            emp.working_hour = int(input('请输入%s本月工作时间：' %emp.name))
        elif isinstance(emp,Saleman):
            emp.sales=float(input('请输入%s本月销售额：' %emp.name))
        #同样是接收到get_salary这个消息但是不同的员工表现了不同的行为（多态）
        print('%s本月的工资为： ￥%s元\n' %(emp.name,emp.get_salary()) )

if __name__ == '__main__':
    main()


